Autogenerated HTML docs for v2.29.2-334-gfaefd 
diff --git a/git-maintenance.txt b/git-maintenance.txt index 3f5d894..6fec1eb 100644 --- a/git-maintenance.txt +++ b/git-maintenance.txt 
@@ -29,6 +29,32 @@  SUBCOMMANDS  -----------   +register:: +	Initialize Git config values so any scheduled maintenance will +	start running on this repository. This adds the repository to the +	`maintenance.repo` config variable in the current user's global +	config and enables some recommended configuration values for +	`maintenance.<task>.schedule`. The tasks that are enabled are safe +	for running in the background without disrupting foreground +	processes. ++ +The `register` subcomand will also set the `maintenance.strategy` config +value to `incremental`, if this value is not previously set. The +`incremental` strategy uses the following schedule for each maintenance +task: ++ +-- +* `gc`: disabled. +* `commit-graph`: hourly. +* `prefetch`: hourly. +* `loose-objects`: daily. +* `incremental-repack`: daily. +-- ++ +`git maintenance register` will also disable foreground maintenance by +setting `maintenance.auto = false` in the current repository. This config +setting will remain after a `git maintenance unregister` command. +  run:: 	Run one or more maintenance tasks. If one or more `--task` options 	are specified, then those tasks are run in that order. Otherwise, @@ -36,6 +62,22 @@ 	config options are true. By default, only `maintenance.gc.enabled` 	is true.   +start:: +	Start running maintenance on the current repository. This performs +	the same config updates as the `register` subcommand, then updates +	the background scheduler to run `git maintenance run --scheduled` +	on an hourly basis. + +stop:: +	Halt the background maintenance schedule. The current repository +	is not removed from the list of maintained repositories, in case +	the background maintenance is restarted later. + +unregister:: +	Remove the current repository from background maintenance. This +	only removes the repository from the configured list. It does not +	stop the background maintenance processes from running. +  TASKS  -----   @@ -110,7 +152,18 @@ 	only if certain thresholds are met. For example, the `gc` task 	runs when the number of loose objects exceeds the number stored 	in the `gc.auto` config setting, or when the number of pack-files -	exceeds the `gc.autoPackLimit` config setting. +	exceeds the `gc.autoPackLimit` config setting. Not compatible with +	the `--schedule` option. + +--schedule:: +	When combined with the `run` subcommand, run maintenance tasks +	only if certain time conditions are met, as specified by the +	`maintenance.<task>.schedule` config value for each `<task>`. +	This config value specifies a number of seconds since the last +	time that task ran, according to the `maintenance.<task>.lastRun` +	config value. The tasks that are tested are those provided by +	the `--task=<task>` option(s) or those with +	`maintenance.<task>.enabled` set to true.    --quiet:: 	Do not report progress or other information over `stderr`. @@ -122,6 +175,50 @@ 	`maintenance.<task>.enabled` configured as `true` are considered. 	See the 'TASKS' section for the list of accepted `<task>` values.   + +TROUBLESHOOTING +--------------- +The `git maintenance` command is designed to simplify the repository +maintenance patterns while minimizing user wait time during Git commands. +A variety of configuration options are available to allow customizing this +process. The default maintenance options focus on operations that complete +quickly, even on large repositories. + +Users may find some cases where scheduled maintenance tasks do not run as +frequently as intended. Each `git maintenance run` command takes a lock on +the repository's object database, and this prevents other concurrent +`git maintenance run` commands from running on the same repository. Without +this safeguard, competing processes could leave the repository in an +unpredictable state. + +The background maintenance schedule runs `git maintenance run` processes +on an hourly basis. Each run executes the "hourly" tasks. At midnight, +that process also executes the "daily" tasks. At midnight on the first day +of the week, that process also executes the "weekly" tasks. A single +process iterates over each registered repository, performing the scheduled +tasks for that frequency. Depending on the number of registered +repositories and their sizes, this process may take longer than an hour. +In this case, multiple `git maintenance run` commands may run on the same +repository at the same time, colliding on the object database lock. This +results in one of the two tasks not running. + +If you find that some maintenance windows are taking longer than one hour +to complete, then consider reducing the complexity of your maintenance +tasks. For example, the `gc` task is much slower than the +`incremental-repack` task. However, this comes at a cost of a slightly +larger object database. Consider moving more expensive tasks to be run +less frequently. + +Expert users may consider scheduling their own maintenance tasks using a +different schedule than is available through `git maintenance start` and +Git configuration options. These users should be aware of the object +database lock and how concurrent `git maintenance run` commands behave. +Further, the `git gc` command should not be combined with +`git maintenance run` commands. `git gc` modifies the object database +but does not take the lock in the same way as `git maintenance run`. If +possible, use `git maintenance run --task=gc` instead of `git gc`. + +  GIT  ---  Part of the linkgit:git[1] suite